# @Autor Xuan
# @File .py
'''
写一个面向对象的例子：
比如创建一个类（Animal）【动物类】，类里有属性（名称，颜色，年龄，性别），类方法（会叫，会跑）
创建子类【猫】，继承【动物类】
重写父类的__init__方法，继承父类的属性
添加一个新的属性，毛发=短毛
添加一个新的方法， 会捉老鼠，
重写父类的‘【会叫】的方法，改成【喵喵叫】
创建子类【狗】，继承【动物类】
复写父类的__init__方法，继承父类的属性
添加一个新的属性，毛发=长毛
添加一个新的方法， 会看家
复写父类的【会叫】的方法，改成【汪汪叫】

在入口函数中创建类的实例
创建一个猫猫实例
调用捉老鼠的方法
打印【猫猫的姓名，颜色，年龄，性别，毛发，捉到了老鼠】
创建一个狗狗实例
调用【会看家】的方法
打印【狗狗的姓名，颜色，年龄，性别，毛发】
再打印
'''

class Animal():
    def __init__(self, name, color, age, gender):
        self.name = name
        self.color = color
        self.age = age
        self.gender = gender

    def Call(self):
        print(f"{self.name}会叫")

    def Run(self):
        print(f"{self.name}会跑")

class Cat(Animal):
    def __init__(self, name, color, age, gender):
        super(Cat, self).__init__(name, color, age, gender)
        self.hair = "短毛"

    def Catch(self):
        result = "会捉老鼠"
        return result

    def Call(self):
        super(Cat, self).Call()
        print(f"{self.name}会喵喵叫")


class Dog(Animal):
    def __init__(self, name, color, age, gender):
        super(Dog, self).__init__(name, color, age, gender)
        self.hair = "长毛"

    def Func(self):
        print(f"{self.name}会看家")

    def Call(self):
        super().Call()
        print(f"{self.name}会汪汪叫")

if __name__ == '__main__':
    cat = Cat("Jimi", "grey", 4, "male")
    cat_r = cat.Catch()
    cat.Call()
    print(f"猫猫的姓名 {cat.name}，颜色 {cat.color}，年龄 {cat.age}， 性别 {cat.gender}， 毛发 {cat.hair}, {cat_r}")

    dog = Dog("lili", "white", 5, "femal")
    dog.Func()
    dog.Call()
    print(f"狗狗的姓名 {dog.name}，颜色 {dog.color}，年龄 {dog.age}， 性别 {dog.gender}， 毛发 {dog.hair}")



